﻿// RecurringJobsConfig.cs
using Hangfire;
using Microsoft.Extensions.DependencyInjection;
using MyDapperApi.Services.Auth;

public static class RecurringJobsConfig
{
    public static void RegisterRecurringJobs(IServiceProvider serviceProvider)
    {
        // 使用 Hangfire 的静态方法注册定时任务
        // 示例1：每分钟执行一次的任务
        //RecurringJob.AddOrUpdate<InventoryService>(
        //    "sync-inventory-minute",
        //    service => service.SyncInventory(),
        //    Cron.Minutely);

        //// 示例2：每天凌晨3点执行的任务（指定时区）
        //var chinaTimeZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");
        //RecurringJob.AddOrUpdate<ReportService>(
        //    "generate-daily-report",
        //    service => service.GenerateDailyReport(),
        //    "0 3 * * *", // 每天3点
        //    timeZone: chinaTimeZone);

        //// 示例3：每周一上午9点执行的任务
        //RecurringJob.AddOrUpdate<CleanupService>(
        //    "weekly-cleanup",
        //    service => service.CleanupOldData(),
        //    "0 9 * * 1", // 每周一9点
        //    timeZone: chinaTimeZone);

        // 优先使用跨平台兼容的 IANA ID (适用于现代 .NET Core/Linux 环境)
        string timeZoneId = "Asia/Shanghai";

        // 如果您的应用确定运行在 Windows 上，也可以使用 Windows ID:
        // string timeZoneId = "China Standard Time"; 

        TimeZoneInfo beijingTimeZone;

        try
        {
            beijingTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
        }
        catch (TimeZoneNotFoundException)
        {
            // 处理找不到时区的情况，例如 fallback 到 UTC 或抛出异常
            // 在生产环境中，应确保使用的 ID 是正确的。
            Console.WriteLine($"未找到时区 ID: {timeZoneId}，请检查系统时区配置。");
            // 如果找不到，可以尝试使用另一种 ID 或直接使用 UTC
            beijingTimeZone = TimeZoneInfo.Utc;
        }

        var options = new RecurringJobOptions
        {
            TimeZone = beijingTimeZone,
        };

        //每3分钟执行一次 客流更新
        RecurringJob.AddOrUpdate<NotificationService>(
            "send-notifications",
            service => service.ISendPendingNotifications(),
            "*/3 * * * *");

        //每一小时执行一次 需求表更新
        RecurringJob.AddOrUpdate<QywxUpdateDocDigService>(
            "clearDocDigitalization-demandService",
            service => service.IClearDocDigitalizationDemandService(),
            "0 */1 * * *");

        RecurringJob.AddOrUpdate<UpdateMeiTuranDocumentCommentJobService>(
    "daily-3am-task",  // 任务唯一标识（建议修改为有意义的名称）
    service => service.IUpdateDocument(),
    "0 3 * * *", options);  // 每天凌晨3点执行

        //每30分钟执行一次 汇报更新
        RecurringJob.AddOrUpdate<NotificationService>(
            "send-UpdateWeeklyReport",
            service => service.IUpdateWeeklyReport(),
            "*/30 * * * *");

        //四个时间进行推送，武汉光谷在场客流信息
        #region

        RecurringJob.AddOrUpdate<NotificationService>(
            "UpdateConsumerNum-00-min",
            service => service.IUpdateConsumerNum(DateTime.Now),
            "0 5 * * *", options);
        RecurringJob.AddOrUpdate<NotificationService>(
            "UpdateConsumerNum-30-min",
            service => service.IUpdateConsumerNum(DateTime.Now),
            "30 10,16 * * *", options);
        RecurringJob.AddOrUpdate<NotificationService>(
            "UpdateConsumerNum-Tmorrow",
            service => service.IUpdateConsumerNum(DateTime.Now.AddDays(1)),
            "0 22 * * *", options);

        #endregion



        Console.WriteLine("所有定时任务已注册完成");
    }
}